package com.acme;


public class Test {
	public static void main(String[] args) {
		int v1 = 3;
		// byte v2 = v1; possible loss of precision
		// приведение int к byte, это приведение типа большей разрядности
		// явное преобразование, в данном случае сужение
		byte v2 = (byte)v1;
		System.out.println(v2); //3
		v1 = 256;

		// byte v3 = v1; possible loss of precision
		// значения типа byte находятся в отрезке [–128,127]
		// но на стадии компиляции значение v1 неизвестно
		// потому такая же ошибка, что выше
		int v3 = v1;
		byte v3_2 = (byte)v1;
		System.out.println(v3); // 256
		System.out.println(v3_2); // 0
		// так как случилось 2ое переполнение 
		// 0 = 256 - length[0,127] - length[-128,-1]

		int v4 = 's';
		System.out.println(v4); // 115
		// 115 код символа 's' в таблице символов
		// при приравнивании 's' был приведен к int
		
		byte v5 = 115;
		if (v5 == 's') {
			System.out.println("Equals"); // Equals
			// 115 код символа 's' в таблице символов
			// потому и зашли в if
			// при проверке на равенство 's' был приведен к int
		}
		
		System.out.println((double)4); //4.0 
		// так как выводится тип double
		
		double d = 5;
		System.out.println(d + 1); // 6.0 
		// d = 5.0, 1 была приведена к double, при попытке сложить
		
		// boolean b = v4; incompatible types
		// типы не просто имеют разные границы, 
		// тип int и boolean несовместимые

		// short v6 = "short"; incompatible types
		// попытка прировнять численному типу строку
		
		// float v7 = 3.67; possible loss of precision
		// число с точкой в коде расценивается как double,
		// float "уже" double, отсюда ошибка о возможности потерять точность
		float v7 = 3.67f;
		float v7_2 = (float)3.67;

		float v9 = 3;
		
		// int v8 = v7; possible loss of precision
		// тип float имеет дробную часть, в отличае от int
		// ошибка о возможности потери этой дробной части
		int v8 = (int)v7; // если нужно обрезать целую часть
		int v8_2 = Math.round(v7); // если надо привести к ближайшему целому
		
		// int array[] = new double["27"]; incompatible types
		// попытка массив int создать как массив double
		// также в [] у new int необходимо указать целое число - число создоваемых элементов
		int array[] = new int[27];
	}
}
